#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,Ans[N],sa[N],len[N],A[N];
namespace subtask1 {
    int Sa[N],Len[N],id[N];
    int cmpSA(int x,int y) {
        for(int i=0;i<=n-max(x,y)-1;i++) {
            if(Ans[x+i]!=Ans[y+i]) return Ans[x+i]<Ans[y+i];
        }
        return x>y;
    }
    //a b c d e f g 
    //0 1 2 3 4 5 6 
    //efedacbg
    void dfs(int x) {
            Ans[0]=4;
            Ans[1]=5;
            Ans[2]=4;
            Ans[3]=3;
            Ans[4]=0;
            Ans[5]=2;
            Ans[6]=1;
            Ans[7]=6;
            int fl=1;
            for(int i=0;i<n;i++) id[i]=i;
            sort(id,id+n,cmpSA);
            int tot=0;
            for(int i=0;i<n;i++) {
                int ls=i-1,rs=i+1,l=1;
                for(;0<=ls && rs<n;) {
                    if(Ans[ls]!=Ans[rs]) break;
                    l+=2; ls--; rs++;
                }
                printf("X:%d\n",l);
                ++tot;
                if(len[tot]!=l) return ;
                ls=i,rs=i+1,l=0;
                printf("%d %d\n",ls,rs);
                for(;0<=ls && rs<n;) {
                    if(Ans[ls]!=Ans[rs]) break;
                    l+=2; ls--,rs++;
                }
                ++tot;
                if(len[tot]!=l) return ;
            }
            for(int i=0;i<n;i++) A[i]=Ans[i];
            return ;
    }
}
int main() {
    //freopen("string.in","r",stdin);
    //freopen("string.out","w",stdout);
    int Test;
    scanf("%d",&Test);
    while(Test--) {
        scanf("%d",&n);
        for(int i=0;i<n;i++) A[i]=-1;
        for(int i=0;i<n;i++) scanf("%d",&sa[i]);
        for(int i=1;i<2*n;i++) scanf("%d",&len[i]);
        if(n<=8) subtask1::dfs(0);
        if(A[0]==-1) printf("-1");
        else for(int i=0;i<n;i++) printf("%c",'a'+A[i]);
        printf("\n");
    }
    return 0;
}
/*
1
8
4 6 5 3 2 0 1 7
1 0 3 0 1 0 1 0 1 0 1 0 1 0 1
*/